package cn.dengta.webapp.risk.bean;

import java.util.Map;

import cn.dengta.context.model.Member;
import cn.dengta.webapp.risk.config.SmCheckConfig;
import cn.dengta.webapp.risk.dto.ZegoParam;
import lombok.Getter;
import lombok.Setter;

/**
 * 数美视频流请求参数类
 *
 * @author zw
 * @since 2022-06-13
 */
@Getter
@Setter
public class RiskVideoStream extends RiskBase {

	/** 事件标识 数美提供固定值：交友秀场：live；1v1交友：message */
	private String eventId;

	/**
	 * 监管一级标签
	 * 可选值：
	 * POLITY：涉政识别
	 * EROTIC：色情&性感违规识别
	 * VIOLENT：暴恐&违禁识别
	 * QRCODE：二维码识别
	 * ADVERT：广告识别
	 * IMGTEXTRISK：图片文字违规识别
	 * 数美提供固定值：POLITY_EROTIC_VIOLENT_ADVERT_QRCODE
	 */
	private String imgType;

	/**
	 * 	视频中的画面需要识别的业务
	 */
	private String imgBusinessType;

	/**
	 * POLITICAL：涉政识别
	 * PORN：色情识别
	 * AD：广告识别
	 * MOAN：娇喘识别
	 * AUDIOPOLITICAL：声音涉政
	 * NONE:不检测音频
	 * 数美提供固定值：MOAN
	 */
	private String audioType;

	/** 图片回调地址，讲视频流中截帧图片的检测结果通过该地址回调给用户 */
	private String imgCallback;

	/** 音频回调地址，将视频流中音频的检测结果通过该地址回调给用户； */
	private String audioCallback;

	/** 请求参数  Y */
	private VideoStreamData data;

	public RiskVideoStream() {
		init();
	}

	public static RiskVideoStream of(boolean riskSmVideo, boolean smImCustom, SmCheckConfig config, VideoStreamData data) {
		RiskVideoStream stream = new RiskVideoStream();
		stream.setEventId(config.getMessageEventId());
		stream.setImgType(riskSmVideo ? config.getVideoStreamImgType() : null);
		stream.setImgBusinessType(smImCustom ? config.getVideoCustomType() : null);
		stream.setAudioType(config.getAudioStreamType());
		stream.setAudioCallback(config.getVideoStreamUrl());
		stream.setImgCallback(config.getVideoImgStreamUrl());
		stream.setData(data);
		return stream;
	}

	@Getter
	@Setter
	public static class VideoStreamData {

		/** 语种 */
		private String lang;

		/** 流类型  ZEGO：即构审核 */
		private String streamType;

		/** 声网配置参数(调用方提供) */
		private ZegoParam zegoParam;

		/** 客户端用户账号唯一标识，用于用户行为分析，建议传入用户 UID，最长40 位 */
		private String tokenId;

		/** 扩展字段 该字段内容会随着回调结果一起原样返回 */
		private Map extra;

        /** 可选值如下：（默认值为0）
         * 0：回调reject、review结果的图片审核信息
         * 1：回调所有结果的图片审核信息
         */
		private Integer returnAllImg;

		public static VideoStreamData of(Long triggerUserId, String channelName, ZegoParam zegoParam) {
			VideoStreamData data = new VideoStreamData();
			data.setZegoParam(zegoParam);
			data.setStreamType(RiskConstants.ZEGO);
			data.setLang(RiskConstants.VIDEO_LANG);
			data.setTokenId(Member.encode(triggerUserId));
			data.setExtra(Map.of("passThrough", Map.of("channelName", channelName)));
			data.setReturnAllImg(1);
			return data;
		}

	}

}
